package com.neuedu.corejava.ch4;
import java.util.Arrays;
import javax.swing.text.StyledEditorKit.ForegroundAction;

public class SortClass {

	public static void main(String[] args) {
		//给定一个int类型的数组，保持班级同学的年龄
		//编写一个算法非对年龄进行排序，分别进行升序和降序排序
		//15分钟
	    int ages[] = {21,20,20,23,22,21,22,23};
		printArray(ages);
		
		bubbleSortAsc(ages);
		printArray(ages);
		
		bubbleSortDesc(ages);
		printArray(ages);
		
		int ages2[] = {21,20,20,23,22,21,22,23};
		//java.util.Arrays  -java语言的api工具类，这是对数组进行操作的工具
		Arrays.sort(ages2);//是升序排序
		printArray(ages2);
		//排序的使用思路：先按照特点规定进行排序，如果需要升序或降序，只需要反向输出即可
		for (int i = ages2.length-1;i>=0; i--) {
			System.out.print(ages2[i]+"\t");
		}
	}
	
	public static void printArray(int[] data){
		for (int d : data) {
			System.out.print(d +"\t");
		}
		System.out.println();
	}
	
	public static void bubbleSortDesc(int[] data){
		if(data==null) return;
				
				
		for(int i=0;i<data.length-1;i++){
			for (int k = 0; k < data.length-1; k++) {
				int tmp = data[i+1];
				if (data[i+1]<data[k+1]) {//升序和降序控制，小于号是降序排序
					data[k] =data[k+1];
					data[k+1]=tmp;
				}
			}
		}
	}

	//在一个类中可以编写一些方法
	//方法的基本结构
	//1.public访问修饰符  static静态修饰符号   -可选
	//2..void返回值类型                                                  -必选
	//3.bubbleSortAsc方法名称                              -必选
	//4.(int[] data)参数列表                                 -参数变量可选，括号必须有
	//5.{大括号称为方法体}                -在非抽象方法中必须有大括号，抽象方法没有方法体
	
	public static void bubbleSortAsc(int[] data){
		if(data==null) return;
					
		for(int i=0;i<data.length-1;i++){
			for (int k = 0; k < data.length-1; k++) {
				int tmp = data[i+1];
				if (data[i+1]>data[k+1]) {//升序和降序控制，大于号是升序排序
					data[k] =data[k+1];
					data[k+1]=tmp;
				}
			}
		}
	}
	
}
